package sun.superstring;

public class ArrayTest3 {
    public static void main(String[] args) {
        // 目标：完成斗地主的做牌和洗牌
        // 洗牌就是把数组中的牌顺序打乱
        start();

    }
    public static void start() {
        // 1.做牌：创建一个动态初始化数组存储54张牌

        String [] poker = new String [54];
        // poker = {null, null, null, null……}
        // 2.准备四种花色，还有点数再开始做牌存入数组中去
        String [] colors = {"♠","♥","♣","♦"};
        String [] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};

        // 3.遍历点数，再遍历花色，把牌存入数组中去
        int index = 0;   // 定义一个变量，记录牌存储的索引和位置
        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < colors.length; j++) {
                // 4.把牌存入数组中去
                poker[index++] = colors[j] + numbers[i];
            }
        }

        // 4.将大小王存入数组中
        poker[index++] = "小王";
        poker[index] = "大王";

        // 5.打印数组中的牌
        for (int i = 0; i < poker.length; i++) {
            System.out.print(poker[i] + " ");
        }
        System.out.println();

        // 6.洗牌：把54张牌的数组poker中的牌顺序打乱
        // ♠2 ♥2 ♣2 ♦2 ♠A ♥A ♣A ♦A ♠K ♥K ♣K ♦K ♠Q ♥Q ♣Q ♦Q ♠J ♥J ♣J ♦J……
        //  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20……
        // 思路一：遍历数组，每次从数组中随机一个位置，然后将当前位置的数和随机位置交换
        // 思路二：遍历54次，每次随机两个位置，将两个位置的数交换
        for (int i = 0; i < poker.length; i++) {
            int index1 = (int)(Math.random() * 54);  // =====> 0 ~ 53
            int index2 = (int)(Math.random() * 54);  // =====> 0 ~ 53
            // 每次随机两个位置，将两个位置的数交换
            String temp = poker[index1];
            poker[index1] = poker[index2];
            poker[index2] = temp;
        }

        // 7.打印洗牌后的数组中的牌
        for (int i = 0; i < poker.length; i++) {
            System.out.print(poker[i] + " ");
        }
    }
}
